#ifndef _CAN_H
#define _CAN_H

#include "os/types.h"
// Classic CAN / CANFD nominal bitrates


enum can_bitrate {
    CAN_BITRATE_10K = 0,
    CAN_BITRATE_20K,
    CAN_BITRATE_50K,
    CAN_BITRATE_100K,
    CAN_BITRATE_125K,
    CAN_BITRATE_250K,
    CAN_BITRATE_500K,
    CAN_BITRATE_750K,
    CAN_BITRATE_1000K,
	CAN_BITRATE_83_3K,

	CAN_BITRATE_INVALID,
};

#define CAN_BITRATE   CAN_BITRATE_250K

// CANFD bitrates
enum can_data_bitrate {
    CAN_DATA_BITRATE_2M = 2,
    CAN_DATA_BITRATE_5M = 5,

	CAN_DATA_BITRATE_INVALID,
};

typedef void (*can_frame_handler)(u32 id, u8 *data, int len);


// Prototypes
void can_drv_init(can_frame_handler handler);
int can_route_message(uint32_t can_id, const void*buff, int len);
int can_send_message(uint32_t can_id, const void*buff, int len);
void can_rx_poll(void);
void can_tx_poll(void);
bool can_drv_is_error(void);

#endif // _CAN_H
